﻿////#include <iostream>
////using namespace std;
////template <class T>
////int Search(int n, T a[], T key)
////{
////    int i;
////    for (i = 0; i < n; i++)
////    {
////        if (a[i] == key)
////        {
////            return i + 1;
////        }
////    }
////    return 0;
////}
////int main()
////{
////    int t,n;
////    char ch;
////    cin >> t;
////    for (int i = 0; i < t; i++)
////    {
////        cin >> ch >> n;
////        if (ch == 'I')
////        {
////            int key;
////            int* a = new int[n];
////            for (int j = 0; j < n; j++)
////            {
////                cin >> a[j];
////            }
////            cin >> key;
////           int result = Search<int>(n, a, key);
////           delete[]a;
////           cout << result << endl;
////        }
////        else if (ch == 'D')
////        {
////            double key;
////            double* a = new double[n];
////            for (int j = 0; j < n; j++)
////            {
////                cin >> a[j];
////            }
////            cin >> key;
////            int result = Search<double>(n, a, key);
////            delete[]a;
////            cout << result << endl;
////        }
////        else if (ch == 'C')
////        {
////            char key;
////            char* a = new char[n];
////            for (int j = 0; j < n; j++)
////            {
////                cin >> a[j];
////            }
////            cin >> key;
////            int result = Search<char>(n, a, key);
////            delete[]a;
////            cout << result << endl;
////        }
////        else
////        {
////            string key;
////            string* a = new string[n];
////            for (int j = 0; j < n; j++)
////            {
////                cin >> a[j];
////            }
////            cin >> key;
////            int result = Search<string>(n, a, key);
////            delete[]a;
////            cout << result << endl;
////        }
////    }
////    return 0;
////}
//#include <iostream>
//using namespace std;
//template <class T>
//int Search(int n, T a[])
//{
//	int max = 0, index = 0;
//	for (int i = 0; i < n; i++)
//	{
//		int count = 0;
//		for (int j = 0; j < n; j++)
//		{
//			if (a[i] == a[j])
//			{
//				count++;
//			}
//		}
//		if (count > max)
//		{
//			max = count;
//			index = i;
//		}
//	}
//	cout << a[index] << " ";
//	return max;
//}
//int main()
//{
//	int t,n;
//	cin >> t;
//	char ch;
//	for (int i = 0; i < t; i++)
//	{
//		cin >> ch >> n;
//		if (ch == 'I')
//		{
//			int* a = new int[n];
//			for (int j = 0; j < n; j++)
//			{
//				cin >> a[j];
//			}
//			int result = Search(n, a);
//			delete[]a;
//			cout << result << endl;
//		}
//		else if (ch == 'C')
//		{
//			char* a = new char[n];
//			for (int j = 0; j < n; j++)
//			{
//				cin >> a[j];
//			}
//			int result = Search(n, a);
//			delete[]a;
//			cout << result << endl;
//		}
//		else
//		{
//			string* a = new string[n];
//			for (int j = 0; j < n; j++)
//			{
//				cin >> a[j];
//			}
//			int result=Search(n, a);
//			delete[]a;
//			cout << result << endl;
//		}
//	}
//	return 0;
//}
//#include <iostream>
//using namespace std;
//template <class T>
//void Search(T a[])
//{
//	int t = 1;
//	for (int i = 0; i < 6; i++)
//	{
//		int flag = 1;
//		for (int j = i ; j < 6; j++)
//		{
//			if (a[i] > a[j])
//			{
//				flag = 0;
//				break;
//			}
//		}
//		if (flag == 0)
//		{
//			cout << "Invalid" << endl;
//			t = 0;
//			break;
//		}
//	}
//	if (t == 1)
//	{
//		cout << "Valid" << endl;
//	}
//}
//int main()
//{
//	char ch;
//	while (cin >> ch)
//	{
//			if (ch == 'i')
//			{
//				int* a = new int[6];
//				for (int i = 0; i < 6; i++)
//				{
//					cin >> a[i];
//				}
//				Search(a);
//				delete[]a;
//			}
//			else if (ch == 'c')
//			{
//				char* a = new char[6];
//				for (int i = 0; i < 6; i++)
//				{
//					cin >> a[i];
//				}
//				Search(a);
//				delete[]a;
//			}
//			else if (ch == 'f')
//			{
//				float* a = new float[6];
//				for (int i = 0; i < 6; i++)
//				{
//					cin >> a[i];
//				}
//				Search(a);
//				delete[]a;
//			}
//		}
//	}
//	return 0;
//}
//#include <iostream>
//using namespace std;
//template <class T>
//class Digit
//{
//private:
//	T a1[100];
//    int n_;
//public:
//	Digit(int n, T a[])
//	{
//		n_ = n;
//		for (int i = 0; i < n; i++)
//		{
//			a1[i] = a[i];
//		}
//	}
//	void adddelete(int b1,T b2,int d1)
//	{
//		for (int i =n_; i >b1; i--)
//		{
//			a1[i] = a1[i - 1];
//		}
//		a1[b1] = b2;
//		for (int i = d1; i <n_+1; i++)
//		{
//			a1[i] = a1[i+1];
//		}
//		for (int i = 0; i < n_-1; i++)
//		{
//			cout << a1[i] << " ";
//		}
//		cout << a1[n_ - 1]<<endl;
//	}
//};
//int main()
//{
//	int n1;
//	cin >> n1;
//	int* a1 = new int[n1];
//	for (int i = 0; i < n1; i++)
//	{
//		cin >> a1[i];
//	}
//	int b1, b2,d1;
//	cin >> b1 >> b2>>d1;
//	Digit<int> digit1(n1, a1);
//	digit1.adddelete(b1, b2,d1);
//	int n2;
//	cin >> n2;
//	double* a2 = new double[n2];
//	for (int i = 0; i < n2; i++)
//	{
//		cin >> a2[i];
//	}
//	int b3,d2;
//	double  b4;
//	cin >> b3 >> b4 >> d2;
//	Digit<double> dight2(n2, a2);
//	dight2.adddelete(b3, b4, d2);
//	return 0;
//}
#include <iostream>
using namespace std;
template <class T>
class Matrix
{
private:
	T** date_;
	int m_, n_;
public:
	Matrix()
	{
		date_ = NULL;
		m_ = 0;
		n_ = 0;
	}
	Matrix(int m, int n) :m_(m), n_(n)
	{
		date_ = new T* [m];
		for (int i = 0l; i < m; i++)
		{
			date_[i] = new T[n];
		}
	}
	~Matrix()
	{
		for (int i = 0; i < m_; i++)
		{
			delete[]date_[i];
		}
		delete[]date_;
	}
	void transport(T** date, int m, int n)
	{
		m_ = m; n_ = n;
		date_ = new T* [m];
		for (int i = 0; i < m; i++)
		{
			date[i] = new T[n];
			for (int j = 0; j < n; j++)
			{
				date_[j][i] = date[i][j];
			}
		}
	}
	Matrix(Matrix& c)
	{
		m_ = c.m_; n_ = c.n_;
		date_ = new T * [m_];
		for (int i = 0; i < m_; i++)
		{
			date_[i] = new T[n_];
			for (int j = 0; j < n_; j++)
			{
				date_[j][i] = c.date_[i][j];
			}
		}
	}
	void print()
	{
		for (int i = 0; i < m; i++)
		{
			for (int j = 0; j < n; j++)
			{
				cout << date_[i][j]<<" ";
			}
			cout << endl;
		}
	}
};
int main()
{
	int t,m,n;
	char ch;
	cin >> t;
	for (int i = 0; i < t; i++)
	{
		cin >> ch>>m>>n;
		if (ch == 'I')
		{
			int** date = new int* [m];
			for (int i = 0; i < m; i++)
			{
				date[i] = new int [n];
			}
			for (int i = 0; i < m; i++)
			{
				for (int j = 0; j < n; j++)
				{
					cin >> date[i][j];
				}
			}
			Matrix<int> matrix(m, n);//添加<int>
			matrix.transport(date, m, n);
			matrix.print();
			for (int i = 0; i < m; i++)
			{
				delete[]date[i];
			}
			delete[]date;
		}
		else if (ch == 'D')
		{
			double** date = new double* [m];
			for (int i = 0; i < m; i++)
			{
				date[i] = new double[n];
			}
			for (int i = 0; i < m; i++)
			{
				for (int j = 0; j < n; j++)
				{
					cin >> date[i][j];
				}
			}
			Matrix<double> matrix(m, n);
			matrix.transport(date, m, n);
			matrix.print();
			for (int i = 0; i < m; i++)
			{
				delete[]date[i];
			}
			delete[]date;
		}
		else
		{
			char** date = new char*[m];
			for (int i = 0; i < m; i++)
			{
				date[i] = new char[n];
			}
			for (int i = 0; i < m; i++)
			{
				for (int j = 0; j < n; j++)
				{
					cin >> date[i][j];
				}
			}
			Matrix<char> matrix(m, n);
			matrix.transport(date, m, n);
			matrix.print();
			for (int i = 0; i < m; i++)
			{
				delete[]date[i];
			}
			delete[]date;
		}
	}
}
